import { get, post, postWithQueryParams, postFormData } from "@/api/request";

/**
 * 进度计划 / 进度计划添加
 * @param {object} data
 * @param {array<number>} [data.attachList] 附件ID列表
 * @param {string} [data.contract] 所属合同
 * @param {string} [data.createTime] 创建时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.createUser] 创建用户
 * @param {number} [data.delFlag] 是否已删除(0否；1是)
 * @param {array<ProjectGanttChart创建传输实体>} [data.dtos] dtos
 * @param {number} [data.id] 主键
 * @param {string} [data.overallPlannedEndTime] 总计划结束时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.planName] 计划名称
 * @param {number} [data.projectId] 项目ID
 * @param {string} [data.remarks] 备注
 * @param {string} [data.responsiblePerson] 负责人
 * @param {string} [data.totalPlannedStartTime] 总计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.updateTime] 更新时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.updateUser] 更新用户
 * @param {string} [data.versionNumber] 版本号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectSchedule页面展示实体>}
 */
export function projectScheduleAdd(data, config) {
  return post("/projectSchedule/add", data, config);
}

/**
 * 进度计划 / 进度计划删除
 * @param {object} params
 * @param {object} data
 * @param {string} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectSchedule页面展示实体>}
 */
export function projectScheduleDelete(params, data, config) {
  return postWithQueryParams("/projectSchedule/delete", params, data, config);
}

/**
 * 进度计划 / 进度计划查询详情
 * @param {object} params
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectSchedule页面展示实体>}
 */
export function projectScheduleDetail(params, config) {
  return get("/projectSchedule/detail", params, config);
}

/**
 * 进度计划 / 进度计划导出
 * @param {object} data
 * @param {string} [data.contract] 所属合同
 * @param {number} [data.id] 主键
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {string} [data.overallPlannedEndTime] 总计划结束时间 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.planName] 计划名称
 * @param {number} [data.projectId] 项目ID
 * @param {string} [data.projectName] 项目名称
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.totalPlannedStartTime] 总计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.versionNumber] 版本号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 陈凯
 */
export function projectScheduleExport(data, config) {
  return post("/projectSchedule/export", data, config);
}

/**
 * 进度计划 / 进度计划查询审核通过合同
 * @param {object} params
 * @param {number} params.projectId projectId
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<ProjectContract页面展示实体>>}
 */
export function projectScheduleGetApprovedContract(params, config) {
  return get("/projectSchedule/getApprovedContract", params, config);
}

/**
 * 进度计划 / 进度计划导入
 * @param {object} data
 * @param {string} [data.file] 文件 binary
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<ProjectGanttChartCreateVO>>}
 * @author 陈凯
 */
export function projectScheduleImport(data, config) {
  return postFormData("/projectSchedule/import", data, config);
}

/**
 * 进度计划 / 进度计划分页查询
 * @param {object} data
 * @param {string} [data.contract] 所属合同
 * @param {number} [data.id] 主键
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {string} [data.overallPlannedEndTime] 总计划结束时间 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.planName] 计划名称
 * @param {number} [data.projectId] 项目ID
 * @param {string} [data.projectName] 项目名称
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.totalPlannedStartTime] 总计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.versionNumber] 版本号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ProjectSchedule页面展示实体>>}
 */
export function projectScheduleList(data, config) {
  return post("/projectSchedule/list", data, config);
}

/**
 * 进度计划 / 进度计划更新
 * @param {object} data
 * @param {array<number>} [data.attachList] 附件ID列表
 * @param {string} [data.contract] 所属合同
 * @param {string} [data.createUser] 创建用户
 * @param {array<ProjectGanttChart创建传输实体>} [data.dtos] dtos
 * @param {number} [data.id] 主键
 * @param {string} [data.overallPlannedEndTime] 总计划结束时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.planName] 计划名称
 * @param {number} [data.progressReportId] progressReportId
 * @param {number} [data.projectId] 项目ID
 * @param {string} [data.remarks] 备注
 * @param {string} [data.responsiblePerson] 负责人
 * @param {string} [data.totalPlannedStartTime] 总计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.updateUser] 更新用户
 * @param {string} [data.versionNumber] 版本号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectSchedule页面展示实体>}
 */
export function projectScheduleUpdate(data, config) {
  return post("/projectSchedule/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} ProjectContract页面展示实体 合同页面展示实体
 * @property {string} bidDate 中标日期
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {number} contractAmount 合同金额
 * @property {string} contractName 合同名称
 * @property {string} contractNumber 合同编号
 * @property {number} contractStatus 合同状态
 * @property {number} contractType 合同类型
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {string} createUserDeptName 创建用户所属部门
 * @property {string} createUserRealName 创建用户真实姓名
 * @property {boolean} delFlag 是否已删除(0否；1是)
 * @property {number} finalAuditAmount 最终审计金额
 * @property {number} id 主键
 * @property {number} isBid 是否中标
 * @property {string} partyA 甲方
 * @property {string} partyB 乙方
 * @property {number} paymentMethod 支付方式
 * @property {number} projectId 项目ID
 * @property {string} projectName 项目名称
 * @property {string} remarks 备注
 * @property {number} reviewStatus 审核状态
 * @property {string} signingDate 签约日期
 * @property {string} signingLocation 签订地点
 * @property {number} signingLocationLatitude 签订地点纬度
 * @property {number} signingLocationLongitude 签订地点经度
 * @property {number} totalContractAmount 合同总金额
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {string} workflowStatus 工作流状态 可选值: APPROVED, NOT_SUBMITTED, REVIEW_REJECTION, UNDER_REVIEW
 * @description 合同页面展示实体
 */

/**
 * @typedef {object} ProjectGanttChart创建传输实体 形象进度甘特图创建传输实体
 * @property {number} ganttId
 * @property {number} isMilepost 是否里程碑节点0-否，1-是
 * @property {string} perTask 前置任务
 * @property {string} pic 负责人
 * @property {string} picName
 * @property {number} planDuration 计划工期
 * @property {string} planEndDate 计划完成时间
 * @property {string} planName 计划名称
 * @property {string} planStartDate 计划开始时间
 * @property {number} progressReportId
 * @property {string} projectId 项目ID
 * @property {number} sort 排序号
 * @property {number} taskLevel 任务层级
 * @description 形象进度甘特图创建传输实体
 */

/**
 * @typedef {object} ProjectGanttChartCreateVO
 * @property {string} isMilepost 是否里程碑节点
 * @property {string} perTask 前置任务
 * @property {string} pic 负责人
 * @property {string} picName 负责人姓名
 * @property {number} planDuration 计划工期
 * @property {string} planEndDate 计划完成时间
 * @property {string} planName 计划名称
 * @property {string} planStartDate 计划开始时间
 * @property {number} sort 排序号
 * @property {number} taskLevel 任务层级
 */

/**
 * @typedef {object} ProjectSchedule页面展示实体 页面展示实体
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} contract 所属合同
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {string} createUserDeptName 创建用户所属部门
 * @property {string} createUserRealName 创建用户真实姓名
 * @property {array<ProjectGanttChart创建传输实体>} dtos
 * @property {number} id 主键
 * @property {string} overallPlannedEndTime 总计划结束时间
 * @property {string} planName 计划名称
 * @property {number} projectId 项目ID
 * @property {string} projectName 项目名称
 * @property {string} remarks 备注
 * @property {string} totalPlannedStartTime 总计划开始时间
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {string} versionNumber 版本号
 * @description 页面展示实体
 */
